package com.ruoyi.lxgl.kylx.mapper;

import com.ruoyi.lxgl.kylx.domain.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 项目申报Mapper接口
 *
 * @author huacai
 * @date 2024-03-14
 */
public interface LlglXmsbMapper {
    /**
     * 查询项目申报与附件
     *
     * @param xmsbId 项目申报主键
     * @return 项目申报
     */
    public LlglXmsb selectLlglXmsbByXmsbId(Integer xmsbId);

    /**
     * 查询项目申报与项目计划进度和目标
     *
     * @param xmsbId 项目申报主键
     * @return 项目申报
     */
    public LlglXmsb selectLlglXmsbByjhjdByXmsbId(Integer xmsbId);

    /**
     * 查询项目申报列表
     *
     * @param llglXmsb 项目申报
     * @return 项目申报集合
     */
    public List<LlglXmsb> selectLlglXmsbList(LlglXmsb llglXmsb);

    /**
     * 查询项目申报列表 (项目申报页面使用)
     * @param llglXmsb
     * @return
     */
    public List<LlglXmsb> getXmsbList(LlglXmsb llglXmsb);

    /**
     * 新增项目申报
     *
     * @param llglXmsb 项目申报
     * @return 结果
     */
    public int insertLlglXmsb(LlglXmsb llglXmsb);

    /**
     * 修改项目申报
     *
     * @param llglXmsb 项目申报
     * @return 结果
     */
    public int updateLlglXmsb(LlglXmsb llglXmsb);

    /**
     * 删除项目申报
     *
     * @param xmsbId 项目申报主键
     * @return 结果
     */
    public int deleteLlglXmsbByXmsbId(Integer xmsbId);

    /**
     * 批量删除项目申报
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLlglXmsbByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量删除附件
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbFjByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增附件
     *
     * @param lxglXmsbFjList 附件列表
     * @return 结果
     */
    public int batchLxglXmsbFj(List<LxglXmsbFj> lxglXmsbFjList);


    /**
     * 通过项目申报主键删除附件信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbFjByXmsbId(Integer xmsbId);

    /**
     * 查询当前分局今年已立项的立项数
     *
     * @param year       xxxx-xx-xxx中的xx
     * @param middlePart xxxx-xx-xxx中的xxxx
     * @return 当前xx的xxx
     */
    int selectProjectNumber(@Param("year") String year, @Param("middlePart") String middlePart);

    /**
     * 新增 附件 根据  项目 id
     *
     * @param lxglXmsbFj 附件实体
     * @return
     */
    int insertLxglXmsbFjByxmsbId(LxglXmsbFj lxglXmsbFj);

    /**
     * 查询附件列表
     *
     * @param lxglXmsbFj 附件
     * @return 附件集合
     */
    public List<LxglXmsbFj> selectLxglXmsbFjList(LxglXmsbFj lxglXmsbFj);


    /**
     * 删除附件
     *
     * @param fjId 附件主键
     * @return 结果
     */
    public int deleteLxglXmsbFjByFjId(Integer fjId);

    /**
     * 查询当前最新的主表主键ID
     *
     * @return
     */
    int selectMAXId();

    /**
     * 查询当前公司今年已立项的最新的立项编号
     * @param year xxxx
     * @param middlePart xx
     * @return xxxx-xx-xxx
     */
    String selectCountLxbh(@Param("year") String year, @Param("middlePart") String middlePart);

    /**
     * 批量删除项目计划进度和目标
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbJhjdByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增项目计划进度和目标
     *
     * @param lxglXmsbJhjdList 项目计划进度和目标列表
     * @return 结果
     */
    public int batchLxglXmsbJhjd(List<LxglXmsbJhjd> lxglXmsbJhjdList);


    /**
     * 通过项目申报主键删除项目计划进度和目标信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbJhjdByXmsbId(Integer xmsbId);

    /**
     * 批量删除研发费用预算上
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbYffyByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增研发费用预算上
     *
     * @param lxglXmsbYffyList 研发费用预算上列表
     * @return 结果
     */
    public int batchLxglXmsbYffy(List<LxglXmsbYffy> lxglXmsbYffyList);


    /**
     * 通过项目申报主键删除研发费用预算上信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbYffyByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用预算上信息信息
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByyffyByXmsbId(Integer xmsbId);

    /**
     * 获取 计划进度表 最大和最小 排列序号
     * @return 结果
     */
    @MapKey("xmsbId")
    public Map<String, Integer> getJhjdMaxAndMinNum(Integer xmsbId);

    /**
     * 按序号获取 计划进度表
     * @return 结果
     */
    public List<LxglXmsbJhjd> getJhjdList(Integer xmsbId);

    /**
     * 修改项目计划进度和目标
     *
     * @param lxglXmsbJhjd 项目计划进度和目标
     * @return 结果
     */
    public int updateLxglXmsbJhjd(LxglXmsbJhjd lxglXmsbJhjd);

    /**
     * 批量删除研发费用预算下
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbYffyysByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增研发费用预算下
     *
     * @param lxglXmsbYffyysList 研发费用预算下列表
     * @return 结果
     */
    public int batchLxglXmsbYffyys(List<LxglXmsbYffyys> lxglXmsbYffyysList);


    /**
     * 通过项目申报主键删除研发费用预算下信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbYffyysByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用预算下信息信息
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByyffysByXmsbId(Integer xmsbId);

    /**
     * 批量删除直接用于研发的主要材料
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbYfclByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增直接用于研发的主要材料
     *
     * @param lxglXmsbYfclList 直接用于研发的主要材料列表
     * @return 结果
     */
    public int batchLxglXmsbYfcl(List<LxglXmsbYfcl> lxglXmsbYfclList);


    /**
     * 通过项目申报主键删除直接用于研发的主要材料信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbYfclByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用研发材料
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbByYfclByXmsbId(Integer xmsbId);

    /**
     * 批量删除设备（专门用于研发主要仪器、设备清单）
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbYfsbByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增设备（专门用于研发主要仪器、设备清单）
     *
     * @param lxglXmsbYfsbList 设备（专门用于研发主要仪器、设备清单）列表
     * @return 结果
     */
    public int batchLxglXmsbYfsb(List<LxglXmsbYfsb> lxglXmsbYfsbList);


    /**
     * 通过项目申报主键删除设备（专门用于研发主要仪器、设备清单）信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbYfsbByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用研发材料
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbYfsbByXmsbId(Integer xmsbId);

    /**
     * 批量删除中间试验费
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbZjsyfByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增中间试验费
     *
     * @param lxglXmsbZjsyfList 中间试验费列表
     * @return 结果
     */
    public int batchLxglXmsbZjsyf(List<LxglXmsbZjsyf> lxglXmsbZjsyfList);


    /**
     * 通过项目申报主键删除中间试验费信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbZjsyfByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与研发费用中间试验费
     * @param xmsbId
     * @return
     */
    LlglXmsb selectLlglXmsbZjsyfByXmsbId(Integer xmsbId);

    /**
     * 获取项目申报与课题组成人员
     * @param xmsbId
     * @return
             */
    LlglXmsb selectLlglXmsbZcryByXmsbId(Integer xmsbId);

    /**
     * 课题归属转换
     * @param llglXmsb
     * @return
     */
    int updateKtgs(LlglXmsb llglXmsb);

    /**
     * 批量删除研究课题组成人员情况
     *
     * @param xmsbIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteLxglXmsbZcryByXmsbIds(Integer[] xmsbIds);

    /**
     * 批量新增研究课题组成人员情况
     *
     * @param lxglXmsbZcryList 研究课题组成人员情况列表
     * @return 结果
     */
    public int batchLxglXmsbZcry(List<LxglXmsbZcry> lxglXmsbZcryList);


    /**
     * 通过项目申报主键删除研究课题组成人员情况信息
     *
     * @param xmsbId 项目申报ID
     * @return 结果
     */
    public int deleteLxglXmsbZcryByXmsbId(Integer xmsbId);

    /**
     * 根据项目所属的部门ID查询它的顶级ID (非100)(分局ID)
     * @param xmDeptId
     * @return
     */
    Integer selectDjIdByXmDeptId(@Param("xmDeptId") Integer xmDeptId);
}
